package com.wxxymaker.service;

import com.wxxymaker.model.entity.User;
import com.wxxymaker.utils.auth.AuthService;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

public interface UserService extends BaseService<User>, AuthService {

    int deleteByUsername(String username);

    /**
     * 检测用户是否存在，用于用户的登录
     * @param user 包含用户账号密码
     */
    boolean checkUser(User user);

    /**
     * 通过用户名获取用户信息
     * @param username 用户名
     */
    @Override
    User getByUsername(String username);

    /**
     * 根据用户真实名获取用户，模糊查询
     * @param name 用户真名
     * @return 所有叫这个名的用户
     */
    List<User> getByLikeName(String name);

    /**
     * 找回密码，传入的用户信息包括 账号，预留电话号码，和新密码
     * 当账号名和预留电话正确时，直接设置新密码
     */
    BackStatus getBack(User user);

    /**
     * 分页查询（应该仅有职位这一可以作为查询条件）, 添加一个用户名作为查询条件，用户名模糊查询
     * @param pageNo  页码
     * @param size    尺寸
     * @param map     查询条件
     */
    Page<User> page(Integer pageNo, Integer size, Map<String, Object> map);

    /**
     * 分页查询，以职位作为查询条件，post为0或null时查询全部
     * @param pageNo  页码
     * @param size    尺寸
     * @param post    职位代码
     * @see User.PostDim  对应的职位代码
     */
    Page<User> page(Integer pageNo, Integer size, Integer post);

    /**
     * 增加用户参评次数
     * @param id 用户id
     */
    boolean addNum(Integer id);

    /**
     * 统计指定职位的人数
     * @param post 指定的职位，空为所有
     */
    long count(Integer... post);

    /**
     * 找回密码时返回的状态
     * msg 状态信息
     * success 是否成功
     */
    class BackStatus {
        private String msg;
        private boolean success;

        public String getMsg() {
            return msg;
        }

        public BackStatus setMsg(String msg) {
            this.msg = msg;
            return this;
        }

        public BackStatus setSuccess(boolean success) {
            this.success = success;
            return this;
        }

        public boolean isSuccess() {
            return success;
        }
    }
}
